/******************************************************************************
 * @brief: app config 数据定义
 * @Author:   aple
 * @Date: 2022-12-07 20:37:48
 * @LastEditors: aple
 * @LastEditTime: 2022-12-10 18:33:16
 * @Verision: 1.0.0.0
 ******************************************************************************/
#ifndef APP_DEF_H_H_
#define APP_DEF_H_H_

#include "mytype.h"

/*****************************************************************************
 * @brief   设备功能开关 .
 *****************************************************************************/
typedef union
{
	uu16 val;
	struct
	{
		uu16 temp : 1;
		uu16 humi : 1;
		uu16 speed : 1;
		uu16 light : 1;
		uu16 uv : 1;
		uu16 co2 : 1;
		uu16 o2 : 1;
		uu16 o3 : 1;
		uu16 press : 1;
	} bits;
} dev_fun_type;

#define FUN_T_EN (1U << 0)
#define FUN_H_EN (1U << 1)
#define FUN_S_EN (1U << 2)
#define FUN_L_EN (1U << 3)
#define FUN_UV_EN (1U << 4)
#define FUN_CO2_EN (1U << 5)
#define FUN_O2_EN (1U << 6)
#define FUN_O3_EN (1U << 7)
#define FUN_P_EN (1U << 8)

/*****************************************************************************
 * @brief   故障管理 .
 * 使用modbus通信的应用。collect位顺序必须和modbus中的错误位序相同
 *****************************************************************************/
typedef union
{
	word_tt tab[4];

	struct
	{
		// ++ mb_reg_err_st2
		uu16 temp_limit_high : 1;  // b00 // CODE:00 // 温度上限
		uu16 temp_limit_low : 1;   // b01 // CODE:01 // 温度下限
		uu16 temp_protect : 1;	   // b02 // CODE:02 // 温度保护
		uu16 temp_offset_high : 1; // b03 // CODE:03 // 温度上偏差
		uu16 temp_offset_low : 1;  // b04 // CODE:04 // 温度下偏差
		uu16 humi_limit_high : 1;  // b05 // CODE:05 // 湿度上限
		uu16 humi_limit_low : 1;   // b06 // CODE:06 // 湿度下限
		uu16 humi_offset_high : 1; // b07 // CODE:07 // 湿度上偏差
		uu16 humi_offset_low : 1;  // b08 // CODE:08 // 湿度下偏差
		uu16 co2_limit_high : 1;   // b09 // CODE:09 // CO2上限
		uu16 co2_limit_low : 1;	   // b10 // CODE:10 // CO2下限
		uu16 co2_offset_high : 1;  // b11 // CODE:11 // CO2上偏差
		uu16 co2_offset_low : 1;   // b12 // CODE:12 // CO2下偏差
		uu16 water_fail : 1;	   // b13 // CODE:13 // 补水失败|缺水
		uu16 door : 1;			   // b14 // CODE:14 // 开门报警
		uu16 license : 1;		   // b15 // CODE:15 // 授权到期
		// ++ mb_reg_err_st3
		uu16 mot_com : 1;		   // b00 // CODE:16 // 电机通信故障
		uu16 mot_vol_low : 1;	   // b01 // CODE:17 // 电机欠压
		uu16 mot_vol_high : 1;	   // b02 // CODE:18 // 电机过压
		uu16 mot_ibgt : 1;		   // b03 // CODE:19 // 电机功率模块故障
		uu16 mot_sen : 1;		   // b04 // CODE:20 // 电机传感器故障
		uu16 mot_overload : 1;	   // b05 // CODE:21 // 电机过载
		uu16 mot_stall : 1;		   // b06 // CODE:22 // 电机堵转
		uu16 mot_unknow : 1;	   // b07 // CODE:23 // 电机其它故障
		uu16 heat : 1;			   // b08 // CODE:24 // 加热故障
		uu16 cool : 1;			   // b09 // CODE:25 // 制冷故障
		uu16 humi_add : 1;		   // b10 // CODE:26 // 加湿故障
		uu16 co2_add : 1;		   // b11 // CODE:27 // CO2加气故障
		uu16 o2_add : 1;		   // b12 // CODE:28 // O2加气故障
		uu16 o3_add : 1;		   // b13 // CODE:29 // O3加气故障
		uu16 press_low : 1;		   // b14 // CODE:30 // 压力低故障
		uu16 press_high : 1;	   // b15 // CODE:31 // 压力高故障
		// ++ mb_reg_err_st4
		uu16 o2_limit_high : 1;	   // b00 // CODE:32 // O2上限
		uu16 o2_limit_low : 1;	   // b01 // CODE:33 // O2下限
		uu16 o2_offset_high : 1;   // b02 // CODE:34 // O2上偏差
		uu16 o2_offset_low : 1;	   // b03 // CODE:35 // O2下偏差
	} bits;
} err_collect_type;

/*****************************************************************************
 * @brief   运行状态收集
 * 使用modbus通信的应用。collect位顺序必须和modbus中的状态位序相同
 *****************************************************************************/
typedef union
{
	word_tt tab[5];

	struct
	{
		// ++ mb_reg_run_st1
		uu16 run_st : 1;	  // b00 // 运行状态
		uu16 fixed_mode : 1;  // b01 // 定值模式
		uu16 prog_mode : 1;	  // b02 // 程序模式
		uu16 baihei_mode : 1; // b03 // 白天黑夜
		uu16 mot_run : 1;	  // b04 // 电机运行状态
		uu16 temp_run : 1;	  // b05 // 温度运行状态
		uu16 tune_temp : 1;	  // b06 // 温度自整定
		uu16 tune_humi : 1;	  // b07 // 湿度自整定
		uu16 tune_co2 : 1;	  // b08 // CO2自整定
		uu16 tune_o2 : 1;	  // b09 // O2自整定
		uu16 b110 : 1;		  // b10
		uu16 steri_st : 1;	  // b11 // 灭菌运行状态
		uu16 time_on : 1;	  // b12 // 计时状态
		uu16 time_unit : 1;	  // b13 // 计时单位
		uu16 order_start : 1; // b14 // 预约开机状态
		uu16 order_end : 1;	  // b15 // 预约关机状态

		// ++ mb_reg_run_st2
		uu16 cf : 1;		   // b00 // 华氏温度
		uu16 light_jk : 1;	   // b01 // 继电器光照
		uu16 light_per : 1;	   // b02 // 百分比光照
		uu16 light_lux : 1;	   // b03 // LUX光照
		uu16 light_lm : 1;	   // b04 // 流明光照
		uu16 uv_unit_wm : 1;   // b05 // 紫外单位 W/M2
		uu16 uv_unit_uwcm : 1; // b06 // 紫外单位 uW/cm2
		uu16 uv_unit_lux : 1;  // b07 // 紫外单位 LUX
		uu16 b2_8 : 1;		   // b08-08
		uu16 co2_unit : 1;	   // b09 // CO2单位
		uu16 o2_unit : 1;	   // b10 // O2单位
		uu16 o3_unit : 1;	   // b11 // O3单位
		uu16 t_2dp : 1;		   // b12 // 温度2位小数
		uu16 stop_hand : 1;	   // b13 // 手动停机
		uu16 stop_time : 1;	   // b14 // 计时结束停机
		uu16 stop_err : 1;	   // b15 // 故障停机

		// ++ mb_reg_run_st3
		uu16 temp_stady : 1;  // b00 // 温度稳定
		uu16 humi_stady : 1;  // b01 // 湿度稳定
		uu16 speed_stady : 1; // b02 // 转速稳定
		uu16 co2_stady : 1;	  // b03 // CO2稳定
		uu16 o2_stady : 1;	  // b04 // O2稳定
		uu16 o3_stady : 1;	  // b05 // O3稳定
		uu16 b3_6_15 : 10;	  // b06-15

		// ++ mb_reg_run_st4
		uu16 cool_delay : 1;   // b00 // 压缩机延时中
		uu16 mot_foreward : 1; // b01 // 电机正转
		uu16 mot_reversal : 1; // b02 // 电机反转
		uu16 mot_suspend : 1;  // b03 // 电机暂停
		uu16 b4_4_15 : 12;	   // b4-b15

		// ++ mb_reg_run_st5
		uu16 rtc_local : 1; // b00 // 本地RTC有效
		uu16 light2_en : 1; // b01 // 光照2开启
		uu16 light3_en : 1; // b02 // 光照3开启
		uu16 light4_en : 1; // b03 // 光照4开启
		uu16 sunlight_en : 1; // b04 // 照明功能开启
		uu16 disinfect_en : 1; // b05 // 消毒功能开启
		uu16 light_lux_x10 : 1; // b06 // 光照LUX显示X10
		uu16 light_sen : 1; // b07 // 光照传感器
		uu16 uv_sen : 1; // b08 // 紫外传感器
	} bits;
} sys_bst_type;

/*****************************************************************************
 * @brief   输出状态收集
 * 使用modbus通信的应用。collect位顺序必须和modbus中的状态位序相同
 *****************************************************************************/
typedef union
{
	word_tt tab[5];

	struct
	{
		// ++ mb_reg_out_st1
		uu16 heat : 1;	   // b00 // 加热
		uu16 humi_add : 1; // b01 // 加湿
		uu16 cool : 1;	   // b02 // 制冷
		uu16 humi_clr : 1; // b03 // 除湿
		uu16 ice_clr : 1;  // b04 // 化霜
		uu16 fan : 1;	   // b05 // 风机
		uu16 disin : 1;	   // b06 // 消毒
		uu16 airout : 1;   // b07 // 排气
		uu16 sunlight : 1; // b08 // 照明
		uu16 wat_add : 1;  // b09 // 补水
		uu16 out_mm : 1;   // b10 // MM输出
		uu16 out_ms : 1;   // b11 // MS输出
		uu16 out_ss : 1;   // b12 // SS输出
		uu16 sterilize : 1; // b13 // 灭菌
		uu16 b115 : 2;	   // b115
	
		// ++ mb_reg_out_st2
		uu16 light1 : 1;   // b00 // 光照1
		uu16 light2 : 1;   // b01 // 光照2
		uu16 light3 : 1;   // b02 // 光照3
		uu16 light4 : 1;   // b03 // 光照4
		uu16 light5 : 1;   // b04 // 光照5
		uu16 light6 : 1;   // b05 // 光照6
		uu16 co2_fast : 1; // b06 // CO2快充
		uu16 co2_slow : 1; // b07 // CO2慢充
		uu16 o2_fast : 1;  // b08 // O2快充
		uu16 o2_slow : 1;  // b09 // O2慢充
		uu16 fan2 : 1;  // b10 // 风机2
		uu16 fan3 : 1;  // b11 // 风机3
	} bits;
} sys_out_st_type;

typedef union
{
	word_tt tab[5];

	struct
	{
		// ++ mb_reg_in_st1
		uu16 door : 1;	// b00 // 门空
		uu16 wat_l : 1; // b01 // 低水位
		uu16 wat_m : 1; // b02 // 中水位
		uu16 wat_h : 1; // b03 // 高水位
	} bits;
} sys_in_st_type;

/*****************************************************************************
 * @brief   text
 *****************************************************************************/
typedef struct
{
	const char *cn;
	const char *en;
} text_ce_type;

#endif /* APP_DEF_H_H_ */
